// pages/my/my.js
const app = getApp()

Page({
  data: {
    userInfo: null,
    orderCounts: {
      pending: 0,
      processing: 0,
      completed: 0,
      cancelled: 0
    },
    functionList: [
      // {
      //   icon: '/images/order.png',
      //   text: '全部订单',
      //   url: '/pages/order/list'
      // },
      {
        icon: '/images/cart.png',
        text: '购物车',
        url: '/pages/cart/cart'
      },
      {
        icon: '/images/favorite.png',
        text: '我的收藏',
        url: '/pages/favorite/list'
      },
      // {
      //   icon: '/images/address.png',
      //   text: '收货地址',
      //   url: '/pages/address/list'
      // }
    ],
    floatButton: {
      left: 30,
      bottom: 120,
      startX: 0,
      startY: 0
    }
  },

  onShow() {
    // 如果全局已有用户信息，直接使用
    if (app.globalData.isLoggedIn) {
      this.setData({
        userInfo: app.globalData.userInfo
      })
      this.getOrderCounts()
      return
    }

    if (typeof this.getTabBar === 'function' && this.getTabBar()) {
      this.getTabBar().setData({
        selected: 1
      })
    }
  },

  // 获取各状态订单数量
  async getOrderCounts() {
    if (!app.globalData.openid) {
      return
    }

    try {
      const db = wx.cloud.database()
      const _ = db.command
      const { data } = await db.collection('orders')
        .where({
          userId: app.globalData.openid
        })
        .get()
      
      const counts = {
        pending: 0,
        processing: 0,
        completed: 0,
        cancelled: 0
      }
      
      data.forEach(order => {
        counts[order.status]++
      })
      
      this.setData({ orderCounts: counts })
    } catch (error) {
      console.error('获取订单数量失败：', error)
    }
  },

  // 获取用户信息
  async onGetUserInfo(e) {
    try {
      // 用户拒绝授权
      if (!e.detail.userInfo) {
        wx.showToast({
          title: '需要授权才能使用',
          icon: 'none'
        })
        return
      }

      wx.showLoading({
        title: '登录中...',
        mask: true
      })

      // 先调用登录云函数获取openid和注册状态
      const { result } = await wx.cloud.callFunction({
        name: 'login'
      })
      
      console.log('登录云函数返回:', result)

      if (result.errMsg) {
        throw new Error(result.errMsg)
      }

      if (!result.openid) {
        throw new Error('获取用户信息失败')
      }

      app.globalData.openid = result.openid

      if (result.isRegistered && result.userInfo) {
        // 已注册用户，直接使用返回的用户信息
        const userInfo = result.userInfo
        wx.setStorageSync('userInfo', userInfo)
        wx.setStorageSync('openid', result.openid)
        app.globalData.userInfo = userInfo
        app.globalData.isLoggedIn = true
        this.setData({ userInfo })
        this.getOrderCounts()

        wx.hideLoading()
        wx.showToast({
          title: '登录成功'
        })
        return
      }

      // 使用授权获取的用户信息
      const userInfo = e.detail.userInfo

      wx.showLoading({
        title: '注册中...',
        mask: true
      })

      // 保存新用户信息到数据库
      const db = wx.cloud.database()
      await db.collection('users').add({
        data: {
          ...userInfo,
          role: 'user',
          createTime: db.serverDate()
        }
      })

      // 保存登录状态
      wx.setStorageSync('userInfo', userInfo)
      wx.setStorageSync('openid', result.openid)
      app.globalData.userInfo = userInfo
      app.globalData.isLoggedIn = true

      // 更新页面数据
      this.setData({ userInfo })
      
      wx.hideLoading()
      wx.showToast({
        title: '登录成功'
      })
    } catch (error) {
      console.error('登录失败：', error)
      wx.hideLoading()
      wx.showToast({
        title: error.message || '登录失败',
        icon: 'none'
      })
    }
  },

  // 跳转订单列表
  goToOrderList(e) {
    if (app.checkNeedLogin()) return
    
    const status = e.currentTarget.dataset.status
    wx.navigateTo({
      url: `/pages/order/list?status=${status}`
    })
  },

  // 点击功能项
  onFunctionClick(e) {
    if (app.checkNeedLogin()) return
    
    const { type, url } = e.currentTarget.dataset
    wx.navigateTo({ url })
  },

  // 开始拖动
  touchStart(e) {
    const { clientX, clientY } = e.touches[0]
    const { left, bottom } = this.data.floatButton
    
    this.setData({
      'floatButton.startX': clientX,
      'floatButton.startY': clientY,
    })
    
    // 记录初始位置（直接使用数字）
    this.startLeft = left
    this.startBottom = bottom
  },

  // 拖动中
  touchMove(e) {
    const { clientX, clientY } = e.touches[0]
    const { startX, startY } = this.data.floatButton
    
    // 计算移动距离
    const moveX = clientX - startX
    const moveY = clientY - startY
    
    // 获取屏幕尺寸
    const { windowWidth, windowHeight } = wx.getSystemInfoSync()
    
    // 计算新位置
    let left = this.startLeft + moveX
    let bottom = this.startBottom - moveY
    
    // 限制按钮不超出屏幕边界
    left = Math.max(30, Math.min(windowWidth - 130, left))
    bottom = Math.max(120, Math.min(windowHeight - 220, bottom))
    
    this.setData({
      'floatButton.left': left,
      'floatButton.bottom': bottom
    })
  },

  // 结束拖动
  touchEnd() {
    // 保存最后的位置到本地存储
    wx.setStorageSync('floatButtonPos', {
      left: this.data.floatButton.left,
      bottom: this.data.floatButton.bottom
    })
  },

  onLoad() {
    // 恢复上次保存的位置
    const pos = wx.getStorageSync('floatButtonPos')
    if (pos) {
      this.setData({
        'floatButton.left': pos.left,
        'floatButton.bottom': pos.bottom
      })
    }
  },

  // 编辑用户信息
  editUserInfo() {
    if (app.checkNeedLogin()) return
    
    wx.navigateTo({
      url: '/pages/user/edit'
    })
  }
})